DDL-alter table修改表结构

追加列:alter table 表名

修改列数据类型:alter table 表明

修改列数据类型+默认值:alter table 表明

修改列约束类型:alter table 表明

修改列约束类型:alter table 表明

修改列名: alter table 表明

删除列:alter table 表明

修改表名:rename 原表名 to 新表名 (注:没有table关键字)

截断表:truncate table 表名

特点1:清空数据,保留表结构

特点2:清空数据时不能给条件

特点3:隐式事务,不能回滚

删除表:drop table 表名

追加列:add

注:oracle只能最后一列追加列,不能向指定列添加数据

1
2
3
--向最后追加两列,要写明数据类型
SQL> alter table emp1 add  (sal number(8,2),cmd varchar2(8));
Table altered

修改列数据类型:

1
2
3
4
5
6
--将cmd字段类型改为数字类型
SQL> alter table emp1 modify (cmd number(2));
Table altered

--修改约束类型
SQL> alter table emp1 MODIFY (ename not null,job not null);

修改列数据类型+默认值:alter table 表明

注:当有需要清空默认值时,使用null

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
--原表数据结构
SQL> desc emp1;
Name       Type        Nullable Default Comments 
---------- ----------- -------- ------- -------- 
ID         NUMBER(2)   Y                         
NAME       VARCHAR2(8) Y                         
AGE        NUMBER(2)   Y                         
START_DATE DATE        Y                         
SAL        NUMBER(8,2) Y                         
CMD        NUMBER(2)   Y                         

--修改cmd字段,数据类型为varchar2 + 默认值owner
SQL> alter table emp1 modify (cmd varchar2(20) default 'owner');
Table altered

SQL> desc  emp1;
Name       Type         Nullable Default Comments 
---------- ------------ -------- ------- -------- 
ID         NUMBER(2)    Y                         
NAME       VARCHAR2(8)  Y                         
AGE        NUMBER(2)    Y                         
START_DATE DATE         Y                         
SAL        NUMBER(8,2)  Y                         
CMD        VARCHAR2(20) Y        'owner'       '      '  

--清空默认值
SQL> alter table emp1 modify (cmd default null);
Table altered

SQL> desc emp1;
Name       Type         Nullable Default Comments 
---------- ------------ -------- ------- -------- 
ID         NUMBER(2)    Y                         
NAME       VARCHAR2(8)  Y                         
AGE        NUMBER(2)    Y                         
START_DATE DATE         Y                         
SAL        NUMBER(8,2)  Y                         
CMD        VARCHAR2(20) Y        null   

修改列名: alter table 表明

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
--将列名sal改为sals
SQL> alter table emp1 rename column sal to sals;
Table altered

SQL> desc emp1;
Name       Type         Nullable Default Comments 
---------- ------------ -------- ------- -------- 
ID         NUMBER(2)    Y                         
NAME       VARCHAR2(8)  Y                         
AGE        NUMBER(2)    Y                         
START_DATE DATE         Y                         
SALS       NUMBER(8,2)  Y                         
CMD        VARCHAR2(20) Y        null      

删除列:alter table 表明

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
--查看原表结构
SQL> desc emp1;
Name       Type         Nullable Default Comments 
---------- ------------ -------- ------- -------- 
ID         NUMBER(2)    Y                         
NAME       VARCHAR2(8)  Y                         
AGE        NUMBER(2)    Y                         
START_DATE DATE         Y                         
SALS       NUMBER(8,2)  Y                         
CMD        VARCHAR2(20) Y        null             

--删除cmd字段列
SQL> alter table emp1 drop column cmd;
Table altered

--验证删除的cmd字段列
SQL> desc emp1;
Name       Type        Nullable Default Comments 
---------- ----------- -------- ------- -------- 
ID         NUMBER(2)   Y                         
NAME       VARCHAR2(8) Y                         
AGE        NUMBER(2)   Y                         
START_DATE DATE        Y                         
SALS       NUMBER(8,2) Y  

修改表名:rename 原表名 to 新表名

很少这么做,但要会!

1
2
3
--将emp2改名为emp222
SQL> rename emp2 to emp222;
Table renamed

截断表:truncate table 表名

简单讲就是不可回滚的直接清空表数据

1
2
SQL> truncate table emp222;
Table truncated